//
//  main.m
//  04-集合(二)
//
//  Created by dllo on 16/7/7.
//  Copyright © 2016年 高雅馨. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Contact.h"
#import "ContactManager.h"
int main(int argc, const char * argv[]) {
#pragma mark - 知识点1  NSDictionary
#if 0
    {
        /*
         * 1 字典也是一种容器, 里面保存的是键值对
         * 2 通过键key  -- 找到对应的 -> 值value
         * 3 字典中存储数据没有顺序
         */
        // 1> 初始化 只能存放对象类型
        NSDictionary *dic =
        [[NSDictionary alloc] initWithObjectsAndKeys:@"阿崽", @"name", [NSNumber numberWithInt:18], @"age", nil];
#warning mark - 注意键值的顺序:值1,键1,值2,键2, nil
        // 2> 便利构造器
        NSDictionary *dic2 =  [NSDictionary dictionaryWithObjectsAndKeys:@"男",  @"sex", @182, @"身高", nil];
        // 3> 字面量 数值对象类型NSNumber @() 数组@[] 字典@{键1:值1,键2:值2};结尾无nil
        NSDictionary *dic3 = @{@"age" : @18, @"height" : @169, @"sex" : @"女"};
        // 4> 取值
        // <1> 通过key 找 value
        [dic3 objectForKey:@"age"];
        // <2> 获取所有的key
        NSArray *allKeys = dic.allKeys;
        // <3> 获取所有的value
        NSArray *allValues = dic2.allValues;
        // <4> count
        NSUInteger count = dic3.count;
        // <5> 通过一个数组,取到对应数组的value
        NSArray *allValueArr =
        [dic objectsForKeys:dic.allKeys notFoundMarker:[NSString class]];
        // <6>👺通过一个对象, 查找所有value是这个对象的所有key
        [dic2 allKeysForObject:@"🙈"];
        // <7> 语法糖取值 arr[下标] diction[key]
        NSLog(@"%@", dic[@"name"]);
#pragma mark - 知识点2  NSMutableDictionary
        // 初始化
        NSMutableDictionary *dic5 =
        [[NSMutableDictionary alloc] initWithCapacity:10];
        // 便利构造器
        NSMutableDictionary *dic6 =
        [NSMutableDictionary dictionaryWithCapacity:1];
        // 可变字典方法
        NSMutableDictionary *dicAll =
        [NSMutableDictionary dictionaryWithObjectsAndKeys:@182, @"height",@"男", @"sex", @"70kg", @"weight", @"32", @"age",  nil];
        // 添加键值对 set 字典中key不要重复, 如果重复, 会以最后的的value进行赋值
        [dicAll setObject:@"小彤" forKey:@"name"];
        NSLog(@"%@", dicAll);
        // 修改某个key对应的值 set
        [dicAll setObject:@"女" forKey:@"sex"];
        NSLog(@"%@", dicAll);
        // 移除键值对 remove
        [dicAll removeObjectForKey:@"sex"];
        [dicAll removeAllObjects];
        // 语法糖 与setObject:forKey 相同
        dicAll[@"name"] = @"🐵";
        NSLog(@"%@", dicAll);
    }
#endif
#pragma mark - 知识点
#if 0
    {
        /**
         *  完成以下需求
         需求：1、定义联系人类Contact。实例变量：姓名(拼音，首字母大写)、性别、电话号码、住址、分组名称、年龄。方法：自定义初始化方法(姓名、电话号码)、显示联系人信息。
         2、在main.m中定义字典，分组管理所有联系人。分组名为26个大写的英文字母。
         3、可以添加联系人对象，如果姓名或电话号码为空，添加失败。添加联系人到匹配的分组。
         4、删除某个分组的全部联系人。
         */
        Contact *contact = [[Contact alloc] initWithName:@"小🙈" phoneNumber:@"18840826368"];
        contact.groupName = @"X";
        [contact showContact];
        NSMutableDictionary *dic = [NSMutableDictionary dictionary];
        // 判断名字和手机号是否为空
        if (contact.name.length > 0 && contact.phoneNumber.length > 0) {
            // 都不是空值,可以添加
            // 通过联系人的分组名, 取到对应的分组数组
            NSMutableArray *arr = [dic objectForKey:contact.groupName];
            // 判断数组是否存在
            if (arr == nil) {
                // 不存在创建
                arr = [NSMutableArray array];
                [arr addObject:contact];
                [dic setObject:arr forKey:contact.groupName];
            } else {
                // 存在直接添加
                [arr addObject:contact];
                [dic setObject:arr forKey:contact.groupName];
            }
            NSLog(@"添加%@联系成功", contact.name);
            // 否则,失败
        } else {
            NSLog(@"你个loser");
        }
    }
#endif
#pragma mark - 联系人
#if 0
    {
        Contact *contact = [[Contact alloc] initWithName:@"小🙈" phoneNumber:@"18840826368"];
        contact.groupName = @"X";
        [contact showContact];
        Contact *contact1 = [[Contact alloc] initWithName:@"大🙈" phoneNumber:@"18840826668"];
        contact1.groupName = @"D";
        [contact1 showContact];
        Contact *contact2 = [[Contact alloc] initWithName:@"老🙈" phoneNumber:@"18840826868"];
        contact2.groupName = @"L";
        [contact2 showContact];
        NSMutableDictionary *dic = [NSMutableDictionary dictionary];
        ContactManager *contactManager = [[ContactManager alloc] initWithDictionary:dic];
        [contactManager addContact:contact];
        [contactManager addContact:contact1];
        [contactManager addContact:contact2];
        
    }
#endif
#pragma mark - 知识点3 集合(了解)
    /*
     * 集合是OC的容器之一,存储的内容是对象
     * 集合的两个特点: 互异性 无序性// 需要知道!!
     * 要删除数组或者字典中重复的内容,放入集合中
     */
    // 3.1 不可变集合
    NSSet *set = [[NSSet alloc] initWithObjects:@"aa", @"bb", @"cc",@"dd", @"ee", nil];
    [NSSet setWithObjects:@"", nil];
    NSLog(@"%@", set);
    // 获取集合中的对象
    [set anyObject];
    NSArray *sets = set.allObjects;
    // 判断某个对象在集合中是否存在
    if ( [set containsObject:@"bb"]) {
        NSLog(@"存在");
    }else{
        NSLog(@"不存在");
    }
    /**
     *  3.2 可变集合  NSMutableSet
     * 1> 初始化与不可变集合一样
     * 2> 取值 anyObject
     * 3> 可变集合 可变性
     */
    NSMutableSet *mutableSet = [NSMutableSet set];
    // 添加
    [mutableSet addObject:@"vv"];
    // 删除
    [mutableSet removeObject:@"aa"];
    [mutableSet removeAllObjects];

    return 0;
}
